package com.example.saiweisi.controller.userController;

import com.example.saiweisi.common.Result;
import com.example.saiweisi.controller.dto.UserDTO;
import com.example.saiweisi.controller.request.AddUserRequest;
import com.example.saiweisi.controller.request.HistoryOrderRequest;
import com.example.saiweisi.controller.request.PageBaseRequest;
import com.example.saiweisi.controller.request.UserLoginRequest;
import com.example.saiweisi.model.User;
import com.example.saiweisi.model.UserMail;
import com.example.saiweisi.service.interf.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RequestMapping("/user")
@RestController
@CrossOrigin
@Slf4j
public class UserController {
    @Autowired
    IUserService userService;
    /**
     * 用账号密码登录
     * @param request 用户账号，密码
     * @return 登录之后将用户信息全部返回到前端并存储到localstorage中
     */
    @PostMapping("/loginAccount")
    public Result loginAccount(@RequestBody UserLoginRequest request){
        UserDTO login = userService.login(request);
        return Result.success(login);
    }

    /**
     * 用邮箱登录
     * @param request 用户账号，邮箱以及验证码
     * @return 登录之后将用户信息全部返回到前端并存储到localstorage中
     */
    @PostMapping("/loginEmail")
    public Result loginEmail(@RequestBody UserLoginRequest request){
        UserDTO login = userService.loginByEmail(request);
        return Result.success(login);
    }

    /**
     * 发送邮箱验证码以登录
     * @param email 邮箱
     * @return 成功信息
     */
    @GetMapping("/email/{email}")
    public Result sendEmailCode(@PathVariable String email){
        userService.sendCode(email);
        return Result.success();
    }

    /**
     * 发送验证码以注册新用户
     * @param email 注册要绑定的邮箱
     * @return 成功信息
     */
    @GetMapping("/registeremail/{email}")
    public Result sendEmailCodetoRegister(@PathVariable String email){
        userService.sendCodeToRegister(email);
        return Result.success();
    }

    /**
     * 注册账号
     * @param request 邮箱和密码
     * @return 将系统自动生成的用户账号返回去告知用户
     */
    @PostMapping("/register")
    public Result register(@RequestBody UserLoginRequest request){
         Long userNum=userService.register(request);
        return Result.success(userNum);
    }
    @PostMapping("/add")
    public Result addUser(@RequestBody AddUserRequest request){
        Long userNum=userService.add(request);
        return Result.success(userNum);
    }

    /**
     * 发送验证码作为找回密码使用
     * @param request 该账号绑定的邮箱
     * @return 成功的信息
     */
    @PostMapping("/forgetemail")
    public Result sentEmailCodeToForgetPassword(@RequestBody UserLoginRequest request){
        userService.sentEmailCodeToForgetPassword(request.getEmail(), (int) request.getUserNum());
        return Result.success();
    }

    /**
     * 忘记密码
     * @param request 包括用户账号， 新密码，邮箱以及邮箱验证码
     * @return 成功信息
     */
    @PostMapping("/forgetpassword")
    public Result forgetPassword(@RequestBody UserLoginRequest request){
        userService.forgetPassword(request);
        return Result.success();
    }

    /**
     * 修改用户信息
     * @param user 用户的所有信息
     * @return 成功信息
     */
    @PostMapping("/save/userinfo")
    public Result saveUserInfo(@RequestBody User user){
        userService.saveUserInfo(user);
        return Result.success();
    }

    /**
     * 发送验证码以改绑邮箱
     * @param email 修改之后的邮箱
     * @return 成功信息
     */
    @GetMapping("/updateemail/{email}")
    public Result sendEmailCodetoUpdateEmail(@PathVariable String email){
        userService.sendCodeToUpdateEmail(email);
        return Result.success();
    }

    /**
     * 改绑邮箱
     * @param request 用户id、新邮箱、验证码
     * @return 成功信息
     */
    @PostMapping("/updateemail")
    public Result updateEmail(@RequestBody UserLoginRequest request){
        userService.updateEmail(request);
        return Result.success();
    }
    /**
     * 根据用户账号查询用户id
     * @param userNum 用户的所有信息
     * @return id
     */
    @GetMapping("/searchByuserNum/{userNum}")
    public Result searchByuserNum(@PathVariable String userNum){
        int UserId = userService.searchByuserNum(userNum);
        if (UserId!=0){
            return Result.success(UserId,"查找通过，此用户存在");
        }
        else
        return Result.error("该用户不存在，请先添加会员！");
    }

}
